/* * This library is part of OpenCms - * the Open Source Content Management System * * Copyright (c) Alkacon Software GmbH (http://www.alkacon.com) * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * For further information about Alkacon Software, please see the * company website: http://www.alkacon.com * * For further information about OpenCms, please see the * project website: http://www.opencms.org * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ package org.opencms.ade.upload.client.ui; import org.opencms.ade.upload.client.Messages; import org.opencms.ade.upload.client.ui.css.I_CmsLayoutBundle; import org.opencms.ade.upload.shared.I_CmsUploadConstants; import org.opencms.gwt.client.ui.input.upload.CmsFileInfo; import org.opencms.gwt.client.ui.input.upload.CmsFileInput; import org.opencms.gwt.shared.CmsListInfoBean; import java.util.HashMap; import java.util.Map; import com.google.gwt.http.client.URL; import com.google.gwt.user.client.ui.FlowPanel; import com.google.gwt.user.client.ui.FormPanel; import com.google.gwt.user.client.ui.FormPanel.SubmitCompleteEvent; import com.google.gwt.user.client.ui.FormPanel.SubmitCompleteHandler; import com.google.gwt.user.client.ui.Hidden; import com.google.gwt.user.client.ui.Panel; /** * Provides the default upload dialog without multiple file selection.<p> * * @since 8.0.0 */ public class CmsUploadDialogImpl extends A_CmsUploadDialog { /** * Implements the submit handler (Used for browsers that don't support file api).<p> */ private class CmsUploadHandler implements SubmitCompleteHandler { /** * The default constructor.<p> */ public CmsUploadHandler() { // noop } /** * @see com.google.gwt.user.client.ui.FormPanel.SubmitCompleteHandler#onSubmitComplete(com.google.gwt.user.client.ui.FormPanel.SubmitCompleteEvent) */ public void onSubmitComplete(SubmitCompleteEvent event) { parseResponse(event.getResults()); } } /** The input file input fields. */ private Map<String, CmsFileInput> m_inputsToUpload = new HashMap<String, CmsFileInput>(); /** * @see org.opencms.ade.upload.client.ui.A_CmsUploadDialog#createInfoBean(org.opencms.gwt.client.ui.input.upload.CmsFileInfo) */ @Override public CmsListInfoBean createInfoBean(CmsFileInfo file) { return new CmsListInfoBean(file.getFileName(), getResourceType(file), null); } /** * @see org.opencms.ade.upload.client.ui.A_CmsUploadDialog#getFileSizeTooLargeMessage(org.opencms.gwt.client.ui.input.upload.CmsFileInfo) */ @Override public String getFileSizeTooLargeMessage(CmsFileInfo file) { return ""; } /** * @see org.opencms.ade.upload.client.ui.A_CmsUploadDialog#isTooLarge(org.opencms.gwt.client.ui.input.upload.CmsFileInfo) */ @Override public boolean isTooLarge(CmsFileInfo cmsFileInfo) { return false; } /** * @see org.opencms.ade.upload.client.ui.A_CmsUploadDialog#submit() */ @Override public void submit() { FormPanel form = createForm(); form.addSubmitCompleteHandler(new CmsUploadHandler()); insertUploadForm(form); form.submit(); } /** * @see org.opencms.ade.upload.client.ui.A_CmsUploadDialog#updateSummary() */ @Override public void updateSummary() { StringBuffer buffer = new StringBuffer(64); buffer.append("<p class=\"").append(I_CmsLayoutBundle.INSTANCE.uploadCss().dialogMessage()).append("\">"); buffer.append("<b>" + Messages.get().key(Messages.GUI_UPLOAD_SUMMARY_FILES_0) + "</b> "); buffer.append(Messages.get().key( Messages.GUI_UPLOAD_SUMMARY_FILES_VALUE_2, new Integer(getFilesToUpload().size()), getFileText())); buffer.append("</p>"); setSummaryHTML(buffer.toString()); } /** * Adds the given file input field to this dialog.<p> * * @param fileInput the file input field to add */ @Override protected void addFileInput(CmsFileInput fileInput) { // add the files selected by the user to the list of files to upload if (fileInput != null) { m_inputsToUpload.put(fileInput.getFiles()[0].getFileName(), fileInput); } super.addFileInput(fileInput); } /** * Creates a hidden input field with the given name and value and adds it to the form panel.<p> * * @param form the form panel * @param fieldName the field name * @param fieldValue the field value */ private void addHiddenField(Panel form, String fieldName, String fieldValue) { Hidden inputField = new Hidden(); inputField.setName(fieldName); inputField.setValue(fieldValue); form.add(inputField); } /** * Creates a form that contains the file input fields and the target folder.<p> * * @return the form */ private FormPanel createForm() { // create a form using the POST method and multipart MIME encoding FormPanel form = new FormPanel(); form.setAction(getUploadUri()); form.setEncoding(FormPanel.ENCODING_MULTIPART); form.setMethod(FormPanel.METHOD_POST); // create a panel that contains the file input fields and the target folder FlowPanel inputFieldsPanel = new FlowPanel(); int count = 0; for (CmsFileInput input : m_inputsToUpload.values()) { String filename = input.getFiles()[0].getFileName(); String fieldName = "file_" + count++; input.setName(fieldName); if (getFilesToUpload().containsKey(filename)) { inputFieldsPanel.add(input); } addHiddenField( inputFieldsPanel, fieldName + I_CmsUploadConstants.UPLOAD_FILENAME_ENCODED_SUFFIX, URL.encode(filename)); } for (String filename : getFilesToUnzip(false)) { addHiddenField(inputFieldsPanel, I_CmsUploadConstants.UPLOAD_UNZIP_FILES_FIELD_NAME, URL.encode(filename)); } addHiddenField(inputFieldsPanel, I_CmsUploadConstants.UPLOAD_TARGET_FOLDER_FIELD_NAME, getTargetFolder()); form.setWidget(inputFieldsPanel); return form; } }